﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;
using CdgNetPersistencia.Atributos;

  /**
    * Autor :  Cristian Daniel Garay Sosa
    * Fecha :  26/03/2012 (v2)
    * Comentarios:
    *          representa a una fila de una tabla pudiendo extenderse segun se necesite
    * 
    * 
    * **/

namespace CdgNetPersistencia.ClasesBases
{
    /// <summary>
    /// Clase base de Objetos Transportadores de Datos
    /// </summary>
    public abstract class OTDbase
    {

        #region CAMPOS(Fields)

        //PROPIEDADES
        public static string NOMBRE_CLASE = "OTDbase";


        protected long _nId;
        protected string _cDescripcion;

        #endregion


        #region CONSTRUCTORES

        /// <summary>
        /// Constructor por defecto de la clase
        /// </summary>
        public OTDbase()
        {
            _nId = 0;
            _cDescripcion = string.Empty;
        }

        /// <summary>
        /// Constructor de la clase
        /// </summary>
        /// <param name="nIdParam">Identificador</param>
        /// <param name="cDescripcionParam">Descripcion</param>
        public OTDbase(long nIdParam, string cDescripcionParam)
        {
            _nId = nIdParam;
            _cDescripcion = cDescripcionParam;    
        }


        #endregion


        #region GETTERS Y SETTERS


        public virtual long nId {get; set; }

        public virtual string cDescripcion { get; set; }
        

        #endregion


        #region SOBREESCRITOS

        /// <summary>
        /// Devuelve la representacion de la clase
        /// </summary>
        /// <returns>Representacion de la Clase</returns>
        public override string ToString()
        {
            return string.Format("<{0} - {1}>", _nId, _cDescripcion.ToUpper());
        }

        /// <summary>
        /// Metodo de comparacion de la clase
        /// </summary>
        /// <param name="obj">Instancia de la clase OTDbase contra la cual comparar</param>
        /// <returns>true si los objetos tienen el mismo Id</returns>
        public override bool Equals(object obj)
        {
            //evaluamos si el parametro es del mismo tipo
            if (!obj.GetType().Equals(GetType())) return false;

            //luego si es el mismo ID
            return _nId.Equals(((OTDbase)obj)._nId);
        }


        #endregion


    }
}
